// magazzino.cpp : Defines the entry point for the console application.
//
/*
scrivere un programma che gestisca un magazzino sono sottaci gli articoli 1 artilo caratterizzato da :
1 codice alfanumerico di lunghezza 10, una descizione un prezzo e una quantità
deve prevedere le seguenti voci di menù:
1) inserimento articoli
2) stampa il magazino
3) vendità richiede un codice di un articolo e decrementa di 1 la quntita di un determinato articolo errore se articolo non è presente in magazzzino oppure se la
quantità è 0,
4) aggiorna quantità dato il codice di un articolo il programma richiede quanti articoli vengono inserite in magazzino


*/
#include "stdafx.h"
#include <iostream>
#include <time.h>
#include <string.h>
#define N 10 + 1
using namespace std;
typedef struct {
	char nome[N];
	char descrizione[N];
	int prezzo=0;
	int quantità=0;
} ARTICOLO;
ARTICOLO*agg_articolo(int *n);
ARTICOLO*carica(int n);
void menù();
void stampa(ARTICOLO c[], int n);
void vendità(ARTICOLO *c, int n);
void aggiorna(ARTICOLO *c, int n);
int main()
{
	menù();
    return 0;
}
void menù() {
	ARTICOLO*a=0;
	int scelta = 0;
	int numero_articoli = 0;
	do {
		system("cls");
		printf("**menù**\n");
		printf("0.esci\n");
		printf("1.carica\n");
		printf("2.stampa\n");
		printf("3.vendita\n");
		printf("4.aggiorna\n");
		scanf_s("%d", &scelta, sizeof(int));
		switch (scelta) {
		case 0:
			printf("arrivederci e lasciate la mancia\n");
			break;
		case 1:
			a = agg_articolo(&numero_articoli);
			break;
		case 2:
			stampa(a, numero_articoli);
			system("pause");
			break;
		case 3:
			vendità(a, numero_articoli);
			system("pause");
			break;
		case 4:
			aggiorna(a, numero_articoli);
			break;
		default:
			printf("valore non valido \n");
			system("pause");
			break;
		}

	} while (scelta != 0);
	free(a);

}
ARTICOLO*agg_articolo(int *n) {
	ARTICOLO *arr;
	int u = 0;
	printf("inserie il numero degli articoli\n");
	scanf_s("%d", n, sizeof(int));
	u = *n;
	arr = carica(u);
	return arr;
}
ARTICOLO*carica(int n) {

	ARTICOLO*a = NULL;
	a = (ARTICOLO*)malloc( n * sizeof(ARTICOLO));
	if (a == NULL) {
		printf("errore\n");
		return 0;
	}
	for (int p= 0; p < n; p++) {
		for (int i = 0; i < N; i++) {
			if ((i % 2) == 0) {
				a[p].nome[i]= '0' + rand() % ('9')
					; //numeri
			}
		else
			{
				a[p].nome[i] = 'a' + rand() % ('z' - 'a');//lettere
			}
		}

	}
	for (int j = 0; j < n; j++) {


		printf("Inserie tipo di prodotto\n");
		scanf_s("%s", a[j].descrizione, N);
	}
	for (int u = 0; u < n; u++) {
		printf("inserie il prezzo\n");
		scanf_s("%d", &a[u].prezzo, sizeof(int));
	}
	for (int q = 0; q < n; q++) {
		printf("inserie  la quantità\n");
		scanf_s("%d", &a[q].quantità, sizeof(int));
	}
	return a;



}
void stampa(ARTICOLO c[], int n) {
	for (int i = 0; i < n; i++) {
		printf("il codice è : %s\n", c[i].nome);
		printf(" la desrizione è: %s \n", c[i].descrizione);
		printf("il prezzo è: %d \n", c[i].prezzo);
		printf("le quantità sono %d \n", c[i].quantità);
	}
}
void vendità(ARTICOLO *c, int n) {
	char articolo[N];
	int g = 0;
	printf("inserire il codice di un articolo \n");
	scanf_s("%s", articolo, N);

	for (int i = 0; i < n; i++) {
		if (strcmp(c[i].nome, articolo) == 0) {
			g = i;
		}
	}
	if (c[g].quantità ==0) {
		printf("l'articolo non è presente \n");
	}
	else {
		c[g].quantità -= 1;
	}

}
void aggiorna(ARTICOLO *c, int n) {
	char articolo[N];
	int g = 0;
	printf("inserire il codice di un articolo \n");
	scanf_s("%s", articolo, N);
	for (int i = 0; i < n; i++) {
		if (strcmp(c[i].nome, articolo) == 0) {
			g = i;
		}
	}
	printf("inserire il numero della quantità \n");
	scanf_s("%d", c[g].quantità, sizeof(int));

}
